package com.chixing.work;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.chixing.entity.OrderBase;
import com.chixing.entity.OrderDetail;
import com.chixing.service.IOrderBaseService;
import com.chixing.service.IOrderDetailService;
import com.chixing.util.Result;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 期订单处理任务
 */
@Service
@Slf4j
public class OrderHistoryGeneratorJob {

    @Autowired
    private IOrderBaseService orderBaseService;
    @Autowired
    private IOrderDetailService orderDetailService;

    /**
     * 定时任务：生成历史订单
     * 执行周期：每天凌晨0点执行
     */
    @XxlJob("generateOrderHistory")
    public ReturnT<String> generateOrderHistory() {
        try {
            log.info("开始生成历史订单...");

            // 查询状态为已支付的订单（例如30天前的订单）
            QueryWrapper<OrderBase> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("statues", 1) // 已支付状态
                    .lt("order_time", LocalDateTime.now().minusDays(2));// 2天前

            List<OrderBase> orders = orderBaseService.list(queryWrapper);



            if (orders.isEmpty()) {
                log.info("未找到需要生成历史订单的数据");
                return ReturnT.SUCCESS;
            }

            log.info("发现 {} 条需生成历史订单的订单", orders.size());

            // 处理每个订单，将其数据迁移到历史表或标记为历史
            for (OrderBase order : orders) {
                // 这里可以实现具体的逻辑，例如：
                // 1. 将订单数据复制到历史表
                // 2. 更新订单status为"历史"
                // 3. 其他业务逻辑

                // 示例：更新订单状态为历史（假设5表示历史状态）
                order.setStatues(5);
                orderBaseService.updateById(order);
                // 同时更新关联的订单详情表状态
                QueryWrapper<OrderDetail> detailQueryWrapper = new QueryWrapper<>();
                detailQueryWrapper.eq("order_id", order.getOrderId());
                List<OrderDetail> relatedDetails = orderDetailService.list(detailQueryWrapper);

                for (OrderDetail detail : relatedDetails) {
                    detail.setStatues(5); // 设置相同的历史状态
                    orderDetailService.updateById(detail);
                }
                log.info("成功处理订单ID: {}", order.getOrderId());
            }

            log.info("完成历史订单生成任务，共处理 {} 条订单", orders.size());
            return ReturnT.SUCCESS;

        } catch (Exception e) {
            log.error("生成历史订单失败", e);
            return ReturnT.FAIL;
        }
    }
}
